// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#ifndef EVA_DB_MANAGER_H
#define EVA_DB_MANAGER_H

//#include <nel/misc/types_nl.h>
//#include <nel/misc/log.h>
//#include <nel/misc/time_nl.h>
//
//#include <nel/net/message.h>
//

#include <nel/misc/singleton.h>
#include <nel/net/message.h>
#include <game_share/game_def.h>
#include <server_share/def_db.h>
#include <server_share/mysql_save.h>
#include <server_share/mysql_helper.h>
#include <server_share/record_player.h>
//#include "table_player.h"



//TUnifiedCallbackItem	DbManagerCbArray[] =
//{
//	{ "TABLE_PLAYER",			&cbInitDatabase },
//
//};

/**
 * Handle management of multiple databases
 * \author li9chuan
 * \date 2013
 */
class CDbManager : public NLMISC::CSingleton<CDbManager>
{
public:

	bool		init( const std::string &hostName, const std::string &userName, const std::string &password, const std::string &defaultDatabase );
	bool		update();
	bool		release();

	bool		putData( NLNET::CMessage &msgin );
	bool		getData( NLNET::CMessage &msgin, NLNET::CMessage &msgout );
	bool		setOffline( DEF::UID uid );

private:
	bool               _Initialised;
	MSH::CMysqlSave    _MysqlSave;
	MSH::CConnection   _MyDB;

//	CTablePlayer       _TablePlayer;

	typedef CHashMap< DEF::PID, DB_RECORD::CRecordPlayer* >    TTable;
	TTable     _PlyerTable;
};

#define  DBManager  CDbManager::instance()

#endif // EVA_DB_MANAGER_H

/* End of db_manager.h */
